.TH io_submit 2 2002-09-02 "Linux 2.4" "Linux AIO"
.SH NAME
io_submit \- submit io requests
.SH SYNOPSIS
.B #include <errno.h>
.br
.B #include <libaio.h>
.LP
.BI "int io_submit(io_context_t " ctx ", long " nr ", struct iocb *" iocbs "[]);"
.SH DESCRIPTION
.B io_submit
submits to the io_context
.I ctx
up to
.I nr
I/O requests pointed to by the vector
.IR iocbs .

The
.B iocb
structure is defined as something like
.sp
.RS
.nf
struct iocb {
    void    *data;
.\"    unsigned    key;
    short    aio_lio_opcode;
    short    aio_reqprio;
    int      aio_fildes;
};
.fi
.RE
.sp
.I data
is a an opaque pointer which will upon completion be returned in the
.B io_event
structure by
.BR io_getevents (2).
.\" and io_wait(2)
Callers will typically use this to point directly or indirectly to a
callback function.
.sp
.I aio_lio_opcode
is the I/O operation requested.  Callers will typically set this and the
arguments to the I/O operation calling the
.BR io_prep_ (3)
function corresponding to the operation.
.sp
.I aio_reqprio
is the priority of the request.  Higher values have more priority; the
normal priority is 0.
.sp
.I aio_fildes
is the file descriptor for the I/O operation.
Callers will typically set this and the
arguments to the I/O operation calling the
.BR io_prep_ *(3)
function corresponding to the operation.
.sp
The caller may not modify the contents or resubmit a submitted
.B iocb
structure until after the operation completes or is canceled.
The implementation of
.BR io_submit (2)
is permitted to modify reserved fields of the
.B iocb
structure.
.SH "RETURN VALUES"
If able to submit at least one iocb,
.B io_submit
returns the number of iocbs submitted successfully.  Otherwise, 
.RI - error
is returned, where 
.I error
is one of the Exxx values defined in the Errors section.
.SH ERRORS
.TP
.B EFAULT
.I iocbs
referenced data outside of the program's accessible address space.
.TP
.B EINVAL
.I nr
is negative,
.I ctx
refers to an uninitialized aio context, the iocb pointed to by 
.IR iocbs [0]
is improperly initialized or specifies an unsupported operation.
.TP
.B EBADF
The iocb pointed to by
.IR iocbs [0]
contains a file descriptor that does not exist.
.TP
.B EAGAIN
Insufficient resources were available to queue any operations.
.SH "SEE ALSO"
.BR io_setup (2),
.BR io_destroy (2),
.BR io_getevents (2),
.\".BR io_wait (2),
.BR io_prep_pread (3),
.BR io_prep_pwrite (3),
.BR io_prep_fsync (3),
.BR io_prep_fdsync (3),
.BR io_prep_noop (3),
.BR io_cancel (2),
.BR errno (3)
